home *** CD-ROM | disk | FTP | other *** search
Wrap
1000 DEFINT I-N: ON ERROR GOTO 18000: IF ANSW%=10 THEN 22000 ELSE 2210 2000 CLS 2010 PRINT "1 CATALOG DATA IN MEMORY" TAB(50) "ECSTAT COMMANDS" 2015 PRINT "2 CATALOG FILES ON DISK" 2020 PRINT "3 DISPLAY DATA" 2025 PRINT "4 PRINT DATA" 2030 PRINT "5 ENTER DATA" 2040 PRINT "6 EDIT DATA" 2050 PRINT "7 ";SDATA$ 2060 PRINT "8 ";RDATA$ 2062 PRINT "9 CHANGE SAMPLE RANGE" 2064 PRINT "10 COMPUTE A NEW VARIABLE" 2070 PRINT "11 ";MVC$ 2090 PRINT "12 ";OLS$;" REGRESSION" 2092 PRINT "13 ";CO$ 2093 PRINT "14 ";TSLS$ 2094 PRINT "15 ";OSF$ 2095 PRINT "16 ";OANDI$ 2096 PRINT "17 SCATTER PLOT" 2098 PRINT "18 TIME PLOT" 2100 PRINT "19 LOAD DATA FROM AN ASCII FILE" 2103 PRINT "20 HOUSEKEEPING OPERATIONS" 2105 PRINT "21 RESTART PROGRAM" 2110 PRINT "22 EXIT PROGRAM" 2120 PRINT 2130 INPUT "ENTER DESIRED SERVICE (1-22) >",ANSWER 2140 ANSW%=ANSWER 2150 IF ANSW%=ANSWER AND ANSW%>=1 AND ANSW%<=22 THEN 2200 2160 PRINT "RESPONSE REQUIRES AN INTEGER BETWEEN 1 AND 21" 2170 GOSUB 19030:GOTO 2000 2200 ON ANSW% GOTO 2210,2500,2500,2500,2500,2500,2500,2500,2210,22000,2210,2210,2210,2210,2210,2210,2210,2210,2500,2500,2500,2210 2210 ON ANSW% GOSUB 3000,3100,4000,4010,5000,6000,7000,8000,20000,3080,9000,11000,26000,28000,27000,29000,25000,25300,8300,3200,13000,14000 2300 REM RETURN HERE AFTER PERFORMING SERVICE 2400 GOTO 2000 2500 CHAIN "ECSTAT1.BAS",1500,ALL 3000 REM DATA CATALOG 3005 LP%=0 3010 CLS 3020 PRINT "NUMBER OF OBSERVATIONS PER VARIABLE: ";NUMOBS 3025 IF LP% THEN LPRINT "NUMBER OF OBSERVATIONS PER VARIABLE: ";NUMOBS 3030 PRINT "NUMBER OF DEFINED VARIABLES: ";NUMVAR 3035 IF LP% THEN LPRINT "NUMBER OF DEFINED VARIABLES: ";NUMVAR 3040 PRINT "NUMBER OF REMAINING VARIABLES: ";MAXVAR-NUMVAR: PRINT 3042 IF LP% THEN LPRINT "NUMBER OF REMAINING VARIABLES: ";MAXVAR-NUMVAR: LPRINT 3048 GOSUB 24800 3049 PRINT: IF LP% THEN LPRINT 3050 PRINT "DEFINED VARIABLES ARE:" : PRINT 3055 IF LP% THEN LPRINT "DEFINED VARIABLES ARE:" : LPRINT 3060 FOR I=0 TO NUMVAR-1 3062 PRINT NAMES$(I), 3064 IF LP% THEN LPRINT NAMES$(I), 3066 NEXT I 3070 GOSUB 19100 3080 IF LP% OR SCR% THEN 3010 ELSE RETURN 8170 GOSUB 19000: RETURN 8600 CLOSE#1: PRINT "INPUT PAST END OF DATA": GOSUB 19030: RETURN 9000 REM 9020 CLS : COR%=1 : LP%=0: PRINT MVC$: PRINT 9040 MAXNAMES=NUMVAR:NEWNAMES=FALSE%:FORCE0%=FALSE% 9050 GOSUB 16000:IF NAMEERR THEN RETURN 9060 REM VARIABLE NUMBERS ARE IN LISTV 0 THROUGH LISTLEN-1 9070 GOSUB 17000 9075 CLS: GOSUB 24800 9077 PRINT : PRINT "VARIABLE"," MEAN ","STANDARD DEV"," VARIANCE" 9080 IF LP% THEN LPRINT : LPRINT "VARIABLE"," MEAN ","STANDARD DEV"," VARIANCE" 9085 COR%=0 9090 FOR I=0 TO LISTLEN-1 9100 PRINT PRNAM$(I),CSNG(XBAR#(I)),CSNG(SQR(XPX#(I,I)/NOBS)),CSNG(XPX#(I,I)/NOBS) 9105 IF LP% THEN LPRINT PRNAM$(I),CSNG(XBAR#(I)),CSNG(SQR(XPX#(I,I)/NOBS)),CSNG(XPX#(I,I)/NOBS) 9110 NEXT I : PRINT 9112 IF LISTLEN>6 THEN GOSUB 19030 9114 PRINT TAB(25) "CORRELATION COEFF" TAB(63) "CORRELATION COEFF" 9115 IF LP% THEN LPRINT : LPRINT TAB(25) "CORRELATION COEFF" TAB(63) "CORRELATION COEFF" 9118 FLIP%=1 : P$=SP22$ 9120 FOR I=0 TO LISTLEN-1 9140 FOR J=I TO LISTLEN-1 9150 LSET P$=PRNAM$(I)+","+PRNAM$(J) 9160 IF XPX#(I,I)=0 OR XPX#(J,J)=0 THEN DP%=TRUE% : GOTO 9172 9170 PI=CSNG(XPX#(I,J)/SQR(XPX#(I,I)*XPX#(J,J))) 9172 IF FLIP%>0 THEN GOSUB 24500 ELSE GOSUB 24550 9174 FLIP%=(-1)*FLIP% : DP%=FALSE% 9180 NEXT J 9190 NEXT I 9200 GOSUB 19100 9210 IF LP% OR SCR% THEN GOTO 9075 9230 RETURN 11000 REM 11050 CLS : PR$=OLS$ 11060 GOSUB 11700 : IF NAMEERR THEN RETURN 11160 IF LISTLEN>=NOBS THEN 11600 11170 REM ALLOCATE REGRESSION STORAGE 11200 GOSUB 11800 11260 NN=L1 : INV%=1: INST=0 : COR%=0 : GOSUB 17000 'COLLECT XPX# 11262 GOSUB 21000 : IF INVERR THEN RETURN 11306 RSUM=0 : SSR#=0 : UL#=0 : DW#=0 : LROB=NSMPL(NR2) 11308 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 11310 FOR K=NSMPL(N1) TO NSMPL(N2) 11312 R#=X#(K,DEPVAR%) 11314 FOR I=0 TO LISTLEN-1 11316 R#=R#-BETA#(I)*X#(K+LAG(I),LISTV(I)) 11318 NEXT I 11320 RESID#(K)=R# : RSUM=RSUM+R# : SSR#=SSR#+R#*R# 11321 DW#=DW#+(RESID#(K)-UL#)*(RESID#(K)-UL#) : UL#=RESID#(K) 11322 NEXT K : NEXT N2 11330 DW#=(DW#-RESID#(NSMPL(1))*RESID#(NSMPL(1)))/SSR# 11400 CLS : S2#=SSR#/(NOBS-LISTLEN) 11405 GOSUB 24000 11406 RETURN 11600 PRINT "NOT ENOUGH OBSERVATIONS" 11610 GOSUB 19000:RETURN 11700 PRINT PR$ 11710 PRINT : PRINT "ENTER DEPENDENT VARIABLE" 11720 MAXNAMES=1:NEWNAMES=FALSE%:FORCE0%=FALSE% 11730 GOSUB 16000:IF NAMEERR THEN RETURN 11740 REM DEPENDENT VARIABLE IN LISTV(0) 11750 DEPVAR%=LISTV(0) 11760 PRINT : PRINT "ENTER EXPLANATORY VARIABLES" 11770 MAXNAMES=NUMVAR:NEWNAMES=FALSE%:FORCE0%=FALSE% 11780 GOSUB 16000:IF NAMEERR THEN RETURN 11785 REM VARIABLE NUMBERS ARE IN LISTV 0 THROUGH LISTLEN-1 11786 FOR I=0 TO L1: LISTRV(I)=LISTV(I): LAGR(I)=LAG(I): NEXT I : LR1=L1 11790 RETURN 11800 YBAR#=0 :YSS#=0 11810 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 11820 FOR K=NSMPL(N1) TO NSMPL(N2) 11830 YBAR#=YBAR#+X#(K,DEPVAR%) 11840 NEXT K : NEXT N2 : YBAR#=YBAR#/NOBS 11850 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 11855 FOR K=NSMPL(N1) TO NSMPL(N2) 11860 YSS#=YSS#+(X#(K,DEPVAR%)-YBAR#)*(X#(K,DEPVAR%)-YBAR#) 11865 NEXT K : NEXT N2 : RETURN 13100 RETURN 14000 REM 14010 REM EXIT PROGRAM 14015 PRINT IFNOT$ 14020 PRINT AYS$; : INPUT "TO EXIT? (Y/N)>",ANSWER$ 14030 IF ANSWER$="y" OR ANSWER$="Y" THEN SYSTEM 14040 RETURN 15000 REM 15070 IF NUMVAR<MAXVAR THEN 15100 15080 PRINT "SYMBOL TABLE FULL! NO NEW VARIABLES" : GOSUB 19050 15090 NAMEERR=TRUE%:RETURN 15100 FOUNDIT%=FALSE% 15110 FOR I=0 TO NUMVAR-1 15120 IF NAMEIS$=NAMES$(I) THEN FOUNDIT%=TRUE% 15130 NEXT I 15140 IF NOT FOUNDIT% THEN 15170 15150 PRINT CHR$(34);NAMEIS$;CHR$(34);" ALREADY DEFINED - NOT A NEW NAME" 15155 GOSUB 19000 15160 NAMEERR=TRUE%:RETURN 15170 NAMELOC=NUMVAR 15180 NUMVAR=NUMVAR+1 15190 NAMES$(NAMELOC)=NAMEIS$ 15200 RETURN 16000 REM 16010 REM COLLECT A LIST OF NAMES AND RETURN LOCATIONS IN LISTV 16020 REM A SINGLE NAME IS A SPECIAL CASE 16030 NAMEERR=FALSE% 16040 IF MAXNAMES>1 THEN 16500 16050 INPUT "VARIABLE NAME IS?> ",NAMEIS$ 16060 IF NAMEIS$="" THEN NAMEERR=TRUE%:RETURN 16070 IF NOT NEWNAMES THEN 16100 16080 GOSUB 15000 16090 IF NAMEERR THEN RETURN ELSE 16180 16100 NAMELOC=-1 16110 FOR I=0 TO NUMVAR-1 16120 IF NAMES$(I)=NAMEIS$ THEN NAMELOC=I 16130 NEXT I 16140 IF NAMELOC<>-1 THEN 16180 16150 PRINT CHR$(34);NAMEIS$;CHR$(34);" NOT DEFINED" 16160 PRINT "RE-ENTER NAME OR <ENTER> TO RETURN TO COMMAND MENU" 16170 GOTO 16050 16180 REM PUT NAMELOC IN LISTV 16190 LISTLEN=1 16200 LISTV(0)=NAMELOC 16210 RETURN 16500 REM COME HERE TO COLLECT A SERIES OF VARIABLES 16501 REM IF FORCE0% THEN INCLUDE CONSTANT AUTOMATICALLY 16502 IF NOT FORCE0% THEN LISTLEN=0 ELSE LISTV(0)=0:LISTLEN=1 16505 PRINT "ENTER VARIABLE NAME(S)" 16510 INPUT "SEPARATED BY A SPACE> ",ANSWER$ 16520 IF ANSWER$="" THEN NAMEERR=TRUE%:RETURN 16535 FOR I=0 TO MAXVAR-1 : LAG(I)=0 : NEXT I 16540 LOOKFROM=1 16550 REM RETRIEVE A VARIABLE NAME 16560 SPACELOC%=INSTR(LOOKFROM,ANSWER$," ") 16570 IF SPACELOC%=0 THEN SPACELOC%=LEN(ANSWER$)+1 16580 NAMEIS$=MID$(ANSWER$,LOOKFROM,SPACELOC%-LOOKFROM) 16582 N1=INSTR(1,NAMEIS$,"[") 16584 IF N1<=1 THEN GOTO 16594 16590 N2=INSTR(N1,NAMEIS$,"]") : LAG$=MID$(NAMEIS$,N1+1,N2-N1-1) 16592 NAMEIS$=LEFT$(NAMEIS$,N1-1) : LG=VAL(LAG$) 16594 IF LG+NSMPL(1)<0 OR LG+NSMPL(NR2)>NUMOBS-1 THEN 16900 16597 NAMELOC=-1 16600 IF NAMEIS$="" THEN 16730 16610 IF NOT NEWNAMES THEN 16630 16620 GOSUB 15000: IF NAMEERR THEN RETURN 16630 FOR I=0 TO NUMVAR-1 16640 IF NAMES$(I)=NAMEIS$ THEN NAMELOC=I 16650 NEXT I 16660 IF NAMELOC<>-1 THEN 16700 16670 PRINT CHR$(34);NAMEIS$;CHR$(34);" NOT DEFINED" 16680 PRINT "RE-ENTER LIST OR "; : PRINT RMM$ 16690 GOTO 16500 16700 REM PUT NAMELOC IN LISTV 16710 LISTV(LISTLEN)=NAMELOC : LAG(LISTLEN)=LG : LG=0 16720 LISTLEN=LISTLEN+1 16730 LOOKFROM=SPACELOC%+1 16740 IF LOOKFROM<=LEN(ANSWER$) THEN GOTO 16850 16745 L1=LISTLEN-1: IF INST THEN RETURN 16750 FOR I=0 TO L1 16760 PRNAM$(I)=NAMES$(LISTV(I)) 16770 IF LAG(I)<0 THEN PRNAM$(I)=PRNAM$(I)+"["+STR$(LAG(I))+"]" 16780 IF LAG(I)>0 THEN PRNAM$(I)=PRNAM$(I)+"[+"+STR$(LAG(I))+"]" 16790 NEXT I : RETURN 16800 NAMEERR=FALSE% : LISTLEN=0 : INPUT "VARIABLE NAME IS?> ",ANSWER$ 16810 GOTO 16520 16850 IF LISTLEN<MAXNAMES THEN 16560 16860 PRINT "TOO MANY NAMES" 16870 GOTO 16680 16900 PRINT "LAG OR LEAD IN ";NAMEIS$;" TAKES VARIABLE OUTSIDE DATA RANGE" 16910 GOSUB 19000 : NAMEERR=TRUE% : RETURN 17000 REM 17010 REM COLLECT PRODUCT MOMENT MATRIX IN XPX# 17020 L1=LISTLEN-1: ERASE XPX#,XPXI#,XBAR#,BETA# 17022 DIM XPX#(L1,L1),XPXI#(L1,L1),XBAR#(L1),BETA#(L1) 17025 IF COR% THEN GOTO 17200 17130 FOR I=0 TO LISTLEN-1 17140 FOR J=I TO LISTLEN-1 17145 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 17150 FOR K=NSMPL(N1) TO NSMPL(N2) 17155 XPX#(I,J)=XPX#(I,J)+X#(K+LAG(I),LISTV(I))*X#(K+LAG(J),LISTV(J)) 17160 NEXT K : NEXT N2 : NEXT J : NEXT I 17170 IF INST THEN RETURN 17178 FOR I=0 TO L1 : Y#(I)=0# 17180 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 17182 FOR K=NSMPL(N1) TO NSMPL(N2) 17184 Y#(I)=Y#(I)+X#(K+LAG(I),LISTV(I))*X#(K,DEPVAR%) 17186 NEXT K : NEXT N2 : NEXT I 17188 GOTO 17500 17200 FOR I=0 TO L1 17215 XBAR#(I)=0# 17220 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 17230 FOR K=NSMPL(N1) TO NSMPL(N2) 17240 XBAR#(I)=XBAR#(I)+X#(K+LAG(I),LISTV(I)) 17250 NEXT K : NEXT N2 17260 XBAR#(I)=XBAR#(I)/NOBS 17320 FOR J=0 TO I 17330 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 17340 FOR K=NSMPL(N1) TO NSMPL(N2) 17350 XPX#(I,J)=XPX#(I,J)+(X#(K+LAG(I),LISTV(I))-XBAR#(I))*(X#(K+LAG(J),LISTV(J))-XBAR#(J)) 17360 NEXT K : NEXT N2 17363 XPX#(J,I)=XPX#(I,J) 17366 NEXT J: NEXT I 17370 RETURN 17500 FOR I=BI% TO LISTLEN-1 17510 FOR J=I+1 TO LISTLEN-1 17520 XPX#(J,I)=XPX#(I,J) 17530 NEXT J : NEXT I : RETURN 18000 REM 18010 REM HANDLE A FEW ERRORS HERE 18020 REM DID WE RUN OUT OF SPACE? 18030 IF ERR<>7 AND ERR<>14 THEN 18400 18040 PRINT "PROGRAM RAN OUT OF MEMORY IN LINE ";ERL 18050 PRINT "SORRY...": STOP 18400 IF ERR<>27 THEN 18420 18405 PRINT "PRINTER NOT ON OR OUT OF PAPER" : GOSUB 19000 18410 RESUME NEXT 18420 IF ERR<>9 THEN 18450 18430 PRINT "WENT BEYOND AVAILABLE DATA" 18440 PRINT "CHECK LAGS AND SAMPLE RANGE" : RESUME 8170 18450 IF ERR<>2 THEN 18490 18460 PRINT "SYNTAX ERROR" 18470 PRINT "YOUR STATEMENT DOESN'T MAKE SENSE TO ME" 18480 RESUME 8170 18490 IF ERR<>5 OR ERL<25000 OR ERL>26000 THEN 18520 18500 PRINT "ON IBM MUST HAVE GRAPHIC MONITOR AND USE ADVANCED BASIC" 18510 GOSUB 19000 : RESUME 8170 18520 IF ERR<>6 THEN 18900 18530 PRINT "Overflow" : RESUME 8170 18900 IF ERR<>5 OR (ERL<>12505 AND ERL<>12430 AND ERL<>11180 AND ERL<>17020 AND ERL<>12460 AND ERL<>3670 AND ERL<> 26060 AND ERL<>28070) THEN 18920 18910 RESUME NEXT 'OK, WE JUST ERASED SOMETHING THAT WASNT THERE 18920 PRINT "ERROR NUMBER ";ERR;" OCCURRED IN LINE ";ERL 18930 PRINT "REPORT CIRCUMSTANCES TO PROGRAM AUTHOR" : RESUME 8170 19000 REM HOLD SCREEN 19010 LOCATE 25,1 : PRINT "HIT ANY KEY TO RETURN TO COMMAND MENU>"; 19020 IF INKEY$="" THEN 19020 ELSE RETURN 19030 LOCATE 25,1 : PRINT "HIT ANY KEY TO CONTINUE>"; 19040 IF INKEY$="" THEN 19040 19045 CLS : RETURN 19050 FOR I=0 TO 1000 : NEXT I : RETURN 19100 IF LP% THEN WLP%=1 19105 LP%=0 : SCR%=0 : S$=" " 19108 LOCATE 25,1 : PRINT "DO YOU WANT TO SEE THE OUTPUT REPEATED? (S, P, OR <RETURN>) "; : INPUT "",ANSWER$ 19110 LSET S$=ANSWER$ 19120 IF S$="P" OR S$="p" THEN LP%=1 ELSE IF S$="S" OR S$="s" THEN SCR%=1 ELSE IF S$<>" " THEN GOTO 19100 19130 IF WLP% THEN LPRINT CHR$(PADV%) : WLP%=0 19135 RETURN 19150 IF LP% THEN WLP%=1 19155 LP%=0 : SCR%=0 : S$=" " 19158 LOCATE 25,1 : PRINT "DO YOU WANT TO SEE THE COVARIANCE MATRIX? (S, P, OR <RETURN>)"; : INPUT "",ANSWER$ 19160 LSET S$=ANSWER$ 19170 IF S$="P" OR S$="p" THEN LP%=1 ELSE IF S$="S" OR S$="s" THEN SCR%=1 ELSE IF S$<>" " THEN GOTO 19150 19180 RETURN 19200 SCR%=0 : LOCATE 25,1 19207 INPUT "WOULD YOU LIKE THE FORECAST GRAPHED? (Y/N)> ",ANSWER$ 19210 IF ANSWER$="Y" OR ANSWER$="y" THEN SCR%=1 : RETURN 19220 IF ANSWER$="N" OR ANSWER$="n" THEN RETURN ELSE 19200 20000 PRINT : INPUT "ENTER SAMPLE RANGE(S): ",ANSWER$ 20010 IF ANSWER$="" THEN RETURN 20020 ANSWER$=ANSWER$+" " : LOOKFROM=1 : I=0 : NSMPL(0)=-1 20030 WHILE LOOKFROM<LEN(ANSWER$) AND I<20 20040 SPACELOC%=INSTR(LOOKFROM,ANSWER$," ") 20050 IF SPACELOC%=LOOKFROM THEN LOOKFROM=LOOKFROM+1 : GOTO 20040 20060 ANSWER=VAL(MID$(ANSWER$,LOOKFROM,SPACELOC%-LOOKFROM))-1 : ANSW%=ANSWER 20065 I=I+1 : NSMPL(I)=ANSW% 20070 IF ANSW%<>ANSWER OR NSMPL(I)<NSMPL(I-1) THEN PRINT "RANGE VALUES MUST BE INTEGERS AND MUST BE IN ASCENDING ORDER" : PRINT PTA$ : GOSUB 19030 : GOTO 20000 20071 IF (I MOD 2) AND NSMPL(I)=NSMPL(I-1) THEN PRINT "CANT USE SAME OBSERVATION TWICE" : PRINT PTA$ : GOSUB 19030 : GOTO 20000 20073 IF ANSW%>NUMOBS THEN PRINT "SAMPLE RANGE BEYOND AVAILABLE DATA" : PRINT PTA$ : GOSUB 19030 : GOTO 20000 20080 LOOKFROM=SPACELOC%+1 20090 WEND 20100 IF (I MOD 2) THEN PRINT "MUST HAVE AN EVEN NUMBER OF ENTRIES. ";PTA$ : GOSUB 19030 : GOTO 20000 20110 NOBS=0 : NR2=I : FOR J=I+1 TO 11 : NSMPL(J)=0 : NEXT J 20120 FOR J=1 TO I STEP 2 : NOBS=NOBS+NSMPL(J+1)-NSMPL(J)+1 : NEXT J 20125 RETURN 21000 FOR I=0 TO NN : IND(I)=I : NEXT I : INVERR=0 21010 FOR I=0 TO NN 21020 GOSUB 21500 21030 SWAP IND(I),IND(IB) : IX=IND(I) 21040 IF XPX#(IX,I)=0# THEN GOTO 21900 21050 FOR J=I+1 TO NN 21060 JX=IND(J) : F#=-XPX#(JX,I)/XPX#(IX,I) 21070 FOR K=I TO NN 21080 XPX#(JX,K)=XPX#(JX,K)+F#*XPX#(IX,K) 21090 NEXT K 21100 XPX#(JX,I)=F# 21110 NEXT J 21120 NEXT I 21125 IF INST THEN RETURN 21130 REM SOLVE FOR BETA 21140 GOSUB 21600 21150 IN=IND(NN) 21160 BETA#(NN)=YS#(NN)/XPX#(IN,NN) 21170 FOR I=NN-1 TO 0 STEP -1 21180 IX=IND(I) : SUM#=0# 21190 FOR K=I+1 TO NN 21200 SUM#=SUM#+XPX#(IX,K)*BETA#(K) 21210 NEXT K 21220 BETA#(I)=(YS#(I)-SUM#)/XPX#(IX,I) 21230 NEXT I 21240 REM SOLVE FOR XPX INVERSE 21250 IF INV%=0 THEN RETURN 21260 FOR L=0 TO NN 21270 FOR I=0 TO NN : Y#(I)=0# : NEXT I 21280 Y#(L)=1# 21290 GOSUB 21600 21300 IN=IND(NN) 21310 XPXI#(NN,L)=YS#(NN)/XPX#(IN,NN) 21320 FOR I=NN-1 TO 0 STEP -1 21330 IX=IND(I) : SUM#=0# 21340 FOR K=I+1 TO NN 21350 SUM#=SUM#+XPX#(IX,K)*XPXI#(K,L) 21360 NEXT K 21370 XPXI#(I,L)=(YS#(I)-SUM#)/XPX#(IX,I) 21380 NEXT I 21390 NEXT L : RETURN 21500 B#=ABS(XPX#(IND(I),I)) : IB=I : IF I=NN THEN RETURN 21510 FOR K=I+1 TO NN 21520 P#=ABS(XPX#(IND(K),I)) 21530 IF P#>B# THEN B#=P# : IB=K 21540 NEXT K : RETURN 21600 YS#(0)=Y#(IND(0)) 21610 FOR I=1 TO NN 21620 IX=IND(I) : SUM#=0# 21630 FOR K=0 TO I-1 21640 SUM#=SUM#+XPX#(IX,K)*YS#(K) 21650 NEXT K 21660 YS#(I)=Y#(IX)+SUM# 21670 NEXT I : RETURN 21900 INVERR=1 21910 PRINT "NUMERICALLY SINGULAR MATRIX" 21920 PRINT "EITHER VARIABLE INCLUDED TWICE OR TOO MUCH "; 21930 PRINT "MULTICOLLINEARITY" 21940 GOSUB 19000:RETURN 22000 REM -BLOCK TO COMPUTE NEW VARIABLES 22010 REM 22020 CLS 22022 PRINT "ENTER FORMULA FOR VARIABLE TO BE COMPUTED" 22025 PRINT "OR <ENTER> TO RETURN TO MAIN MENU" : PRINT 22030 INPUT ">",ANSWER$ : IF ANSWER$="" THEN GOTO 2000 22040 IEQ=INSTR(1,ANSWER$,"=") 22050 IF IEQ<2 THEN GOTO 22020 22060 A$=LEFT$(ANSWER$,IEQ-1) 22070 ANSWER$=RIGHT$(ANSWER$,LEN(ANSWER$)-IEQ)+"!" 22075 IF ANSWER$="!" THEN GOTO 22020 22080 REM -GET RID OF ANY SPACES 22090 IF LEFT$(A$,1)=" " THEN A$=RIGHT$(A$,LEN(A$)-1) : GOTO 22090 22100 IF RIGHT$(A$,1)=" " THEN A$=LEFT$(A$,LEN(A$)-1) : GOTO 22100 22110 REM -CHECK NAME TABLE FOR THIS VARIABLE 22115 NAMELOC=-1 22120 FOR I=0 TO NUMVAR-1 22130 IF NAMES$(I)=A$ THEN NAMELOC=I : GOTO 22155 22140 NEXT I 22150 NAMEIS$=A$ : GOSUB 15170 'ENTER A NEW VARIABLE NAME 22155 IF NAMELOC=0 THEN PRINT "CANT CHANGE CONST" : GOSUB 19030 : GOTO 22020 22160 JSTR$=STR$(NAMELOC) : LHV%=NAMELOC 22170 A$="23050 X#(I,"+JSTR$+")=" 22180 REM -A LOOP STARTS HERE WHICH IDENTIFIES OBJECTS ON RHS 22190 REM 22200 S$=" " : NPOS=1 : N1=NPOS : N2=N1 22210 S$=MID$(ANSWER$,NPOS,1) 22220 IF S$="!" THEN GOTO 22900 22230 IF S$=" " THEN NPOS=NPOS+1 : GOTO 22210 22240 N1=NPOS : IF ASC(S$)<65 OR ASC(S$)>90 THEN GOTO 22650 22250 REM 22260 REM - S$ IS FIRST LETTER OF VARIABLE OR FUNCTION 22270 WHILE (ASC(S$)>=65 AND ASC(S$)<=90) OR (ASC(S$)>=48 AND ASC(S$)<=57) 22280 NPOS=NPOS+1 : S$=MID$(ANSWER$,NPOS,1) 22290 WEND 22300 N2=NPOS : NAMEIS$=MID$(ANSWER$,N1,N2-N1) 22310 REM 22320 REM -IS IT A VARIABLE? 22330 REM 22340 FOR I=0 TO NUMVAR-1 22350 IF NAMES$(I)=NAMEIS$ THEN NAMELOC=I : GOTO 22400 22360 NEXT I 22363 IF NAMEIS$="RESID" THEN A$=A$+"RESID#(I)" : GOTO 22210 22366 IF NAMEIS$="SRESID" THEN A$=A$+"SRESID(I)" : GOTO 22210 22370 REM -NOT A VARIABLE 22380 GOTO 22550 22390 REM - A RECOGNIZED VARIABLE, CHECK FOR LAG 22400 JSTR$=STR$(NAMELOC) : LAG$="" 22410 IF S$<>"[" THEN GOTO 22480 22420 N1=NPOS : N2=INSTR(N1,ANSWER$,"]") : NPOS=N2+1 22430 IF N2=0 THEN GOTO 22520 22440 LAG$=MID$(ANSWER$,N1+1,N2-N1-1) : LAG=VAL(LAG$) 22450 IF LAG+NSMPL(1)<0 OR LAG+NSMPL(NR2)>NUMOBS-1 THEN 23300 22460 IF LAG=0 THEN GOTO 22520 22470 IF LAG>0 AND LEFT$(LAG$,1)<>"+" THEN LAG$="+"+LAG$ 22480 A$=A$+"X#(I"+LAG$+","+JSTR$+")" 22490 GOTO 22210 22500 REM -TREAT LAG ERRORS HERE 22520 PRINT "INVALID OR ZERO LAG IN ";NAMEIS$ 22522 PRINT PTA$ : GOSUB 19030 : GOTO 22020 22530 REM -CHECK HERE FOR FUNCTION 22540 IF S$<>")" THEN GOTO 22590 22550 FOR I=0 TO NFCN-1 22560 IF FCN$(I)=NAMEIS$ THEN GOTO 22600 22570 NEXT I 22580 REM 22590 PRINT "UNDEFINED VARIABLE OR FUNCTION: ";NAMEIS$ 22597 PRINT PTA$ : GOSUB 19030 : GOTO 22020 22600 REM -VALID FUNCTION 22610 A$=A$+NAMEIS$+"(" 22620 NPOS=NPOS+1 : GOTO 22210 22650 IF (ASC(S$)<48 OR ASC(S$)>57) AND S$<>"." THEN GOTO 22720 22660 WHILE ASC(S$)>=48 AND ASC(S$)<=57 OR S$="." 22670 NPOS=NPOS+1 : S$=MID$(ANSWER$,NPOS,1) 22680 WEND 22700 A$=A$+MID$(ANSWER$,N1,NPOS-N1) : GOTO 22210 22710 REM -CHECK FOR OPERATORS OR PARENTHESES 22720 IF S$="(" OR S$=")" OR S$="+" OR S$="-" OR S$="*" OR S$="/" OR S$="^" THEN A$=A$+S$ : NPOS=NPOS+1 :GOTO 22210 22750 PRINT "INVALID CHARACTER ";S$;" IN FORMULA " 22760 PRINT PTA$ : GOSUB 19030 : GOTO 22020 22890 REM -CHECK FOR UNMATCHED PARENTHESES 22900 N1=0 : N2=0 : NPOS=1 : S$=" " 22910 WHILE S$<>"!" 22920 S$=MID$(ANSWER$,NPOS,1) 22930 IF S$="(" THEN N1=N1+1 22940 IF S$=")" THEN N2=N2+1 22950 NPOS=NPOS+1 22960 WEND 22970 IF N1<>N2 THEN PRINT "UNMATCHED PARENTHESES IN FORMULA ";PTA$ :PRINT : GOSUB 19030 22980 IF N1<>N2 THEN GOTO 22020 23000 OPEN "FORMULA.BAS" FOR OUTPUT AS #1 23010 PRINT#1,A$ : CLOSE#1 23020 CHAIN MERGE "FORMULA.BAS",23025,ALL 23025 ON ERROR GOTO 23100 23030 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 23040 FOR I=NSMPL(N1) TO NSMPL(N2) 23050 X#(I, 6)=LOG(X#(I, 1)) 23060 NEXT I : NEXT N2 : ON ERROR GOTO 18000 23070 PRINT : PRINT NAMES$(LHV%);" COMPUTED" : GOSUB 19050 23080 GOTO 22020 23100 IF ERR<>2 THEN 23140 23110 PRINT "SYNTAX ERROR - FORMULA DOESNT MAKE SENSE" 23120 PRINT PTA$ : GOSUB 19030 23130 RESUME 23500 23140 IF ERR<>5 THEN 23180 23150 PRINT "ERROR IN FORMULA" 23160 PRINT "PROBABLY TRIED TO TAKE LOG OR SQUARE ROOT OF ZERO OR NEGATIVE NUMBER" 23170 PRINT PTA$ : GOSUB 19030 23175 RESUME 23500 23180 IF ERR<>11 THEN 23190 23183 PRINT "DIVISION BY ZERO" : PRINT PTA$ : RESUME 23500 23190 IF ERR<>22 THEN 23280 23200 PRINT "ERROR IN FORMULA" : PRINT 23205 PRINT ANSWER$ : PRINT : PRINT PTA$ : GOSUB 19030 23210 RESUME 23500 23280 PRINT "ERROR NUMBER ";ERR;" OCCURRED IN FORMULA" 23290 PRINT PTA$ : GOSUB 19030 : RESUME 23500 23300 PRINT "LAG TAKES VARIABLE OUTSIDE AVAILABLE DATA" 23310 PRINT "CHECK SAMPLE RANGE" : PRINT PTA$ : GOSUB 19030 23320 GOTO 22020 23500 ON ERROR GOTO 18000 : GOTO 22020 24000 WLP%=0 24005 CLS 24010 PRINT SPC(4) PR$ TAB(40) "DEPENDENT VARIABLE IS ";NAMES$(DEPVAR%) 24015 IF LP% THEN LPRINT : LPRINT: LPRINT : LPRINT SPC(4) PR$ TAB(40) "DEPENDENT VARIABLE IS ";NAMES$(DEPVAR%) 24030 GOSUB 24800 24032 IF INST=0 THEN 24040 24034 PRINT: PRINT SPC(4) "Instruments: ";: PRINT INST$ 24036 IF LP% THEN LPRINT: LPRINT SPC(4) "Instruments: ";: LPRINT INST$ 24040 IF RHO<>0 THEN PRINT:PRINT SPC(4) "RHO = ";RHO : IF LP% THEN LPRINT:LPRINT SPC(4) "RHO = ";RHO 24060 PRINT : PRINT TAB(25) "COEFFICIENT" TAB(43) "STANDARD ERROR" TAB(61) "T-STATISTIC" 24065 IF LP% THEN LPRINT : LPRINT : LPRINT TAB(25) "COEFFICIENT" TAB(43) "STANDARD ERROR" TAB(61) "T-STATISTIC" 24070 FOR I=0 TO LISTLEN-1 24080 IF XPXI#(I,I)<0 THEN SE#=0 ELSE SE#=SQR(S2#*XPXI#(I,I)) 24120 PRINT SPC(6) PRNAM$(I) TAB(26) CSNG(BETA#(I)) TAB(44) CSNG(SE#); 24125 IF LP% THEN LPRINT SPC(6) PRNAM$(I) TAB(26) CSNG(BETA#(I)) TAB(44) CSNG(SE#); 24130 IF SE#<>0 THEN PRINT TAB(62) CSNG(BETA#(I)/SE#) ELSE PRINT 24135 IF LP% AND SE#<>0 THEN LPRINT TAB(62) CSNG(BETA#(I)/SE#) ELSE IF LP% THEN LPRINT 24140 NEXT I : PRINT : IF LP% THEN LPRINT 24150 P$=SP22$ 24155 IF YSS#=0 THEN 24242 24160 LSET P$="R-squared" : PI=1-SSR#/YSS# : GOSUB 24500 24170 LSET P$="Mean of depend var" : PI=YBAR# : GOSUB 24550 24180 LSET P$="Adjusted R-squared" : PI=1!-(NOBS-1)*S2#/YSS# : GOSUB 24500 24190 LSET P$="Std dev depend var" : PI=SQR(YSS#/(NOBS-1)) : GOSUB 24550 24200 LSET P$="Std err of regress" : PI=SQR(S2#) : GOSUB 24500 24210 LSET P$="Residual sum" : PI=RSUM : GOSUB 24550 24220 LSET P$="Durbin Watson stat" : PI=DW# : GOSUB 24500 24230 LSET P$="Sum squared resid" : PI=SSR# : GOSUB 24550 24235 IF L1=0 THEN 24242 24240 LSET P$="F statistic" : PI=(1-SSR#/YSS#)*(NOBS-LISTLEN)/((L1)*SSR#/YSS#) : GOSUB 24500 24242 GOSUB 19150 24245 IF LP% OR SCR% THEN GOTO 24250 ELSE GOTO 24340 24250 CLS : PRINT TAB(32) "COVARIANCE MATRIX" : PRINT 24255 IF LP% THEN LPRINT : LPRINT : LPRINT TAB(32) "COVARIANCE MATRIX" : LPRINT 24257 FLIP%=1 24260 FOR I=0 TO LISTLEN-1 24280 FOR J=I TO LISTLEN-1 24290 LSET P$=PRNAM$(I)+","+PRNAM$(J) : PI=S2#*XPXI#(I,J) 24320 IF FLIP%>0 THEN GOSUB 24500 ELSE GOSUB 24550 24325 FLIP%=(-1)*FLIP% 24330 NEXT J : NEXT I 24340 GOSUB 19100 24350 IF LP% OR SCR% THEN GOTO 24005 24370 RETURN 24500 PRINT TAB(5) P$; 24505 IF LP% THEN LPRINT TAB(5) P$; 24510 IF NOT DP% THEN PRINT TAB(28) PI; 24515 IF LP% AND NOT DP% THEN LPRINT TAB(28) PI; 24520 DP%=0 : P$=SP22$ : RETURN 24550 PRINT TAB(44) P$; 24555 IF LP% THEN LPRINT TAB(44) P$; 24560 IF NOT DP% THEN PRINT TAB(66) PI 24565 IF LP% AND NOT DP% THEN LPRINT TAB(66) PI 24570 DP%=0 : P$=SP22$ : RETURN 24800 PRINT SPC(4) "SAMPLE RANGE "; 24803 IF LP% THEN LPRINT SPC(4) "SAMPLE RANGE "; 24807 N1=1 : N2=2 24810 PRINT NSMPL(N1)+1;"-";NSMPL(N2)+1; 24820 IF LP% THEN LPRINT NSMPL(N1)+1;"-";NSMPL(N2)+1; 24830 IF N2>=NR2 THEN PRINT : RETURN 24840 N1=N1+2 : N2=N2+2 : PRINT SPC(2); 24850 IF LP% THEN LPRINT SPC(2); 24860 GOTO 24810 25000 CLS 25010 PRINT "SCATTER PLOT" : PRINT 25020 PRINT "VARIABLE FOR X AXIS" 25030 NEWNAMES=FALSE% 25040 GOSUB 16800 : IF NAMEERR THEN RETURN 25050 NX=LISTV(0) : LAGX=LAG(0) : NAM1$=PRNAM$(0) 25070 PRINT: PRINT "VARIABLE FOR Y AXIS" : GOSUB 16800 : IF NAMEERR THEN RETURN 25075 NVAR=NX : LAG=LAGX : GOSUB 25700 25077 XMAX=AMAX : XMIN=AMIN 25080 NY=LISTV(0) : LAGY=LAG(0) : LAG=LAGY : NVAR=NY : GOSUB 25700 25090 YMAX=AMAX : YMIN=AMIN : CLS : SCREEN HRES% 25100 XA%=BOT% : YA%=SLEFT% 25105 XB=(SRIGHT%-SLEFT%)/(XMAX-XMIN) : YB=(BOT%-TOP%)/(YMAX-YMIN) 25110 IF XMAX>0 AND XMIN<0 THEN YA%=YA%-XMIN*XB 25120 IF YMAX>0 AND YMIN<0 THEN XA%=XA%+YMIN*YB 25130 LINE (SLEFT%,XA%)-(SRIGHT%,XA%) 25140 LINE (YA%,BOT%)-(YA%,TOP%) 25160 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 25170 FOR K=NSMPL(N1) TO NSMPL(N2) 25180 I=SLEFT%+(X#(K+LAGX,NX)-XMIN)*XB : J=BOT%-(X#(K+LAGY,NY)-YMIN)*YB 25190 PSET (I,J) : DRAW "U1F1G1H1" 25200 NEXT K : NEXT N2 25205 N1=75-LEN(NAM1$) : LOCATE 2,5 : PRINT PRNAM$(0); : LOCATE 24,N1 : PRINT NAM1$; 25207 GOSUB 19020 25210 CLS : SCREEN 0 : RETURN 25300 CLS : XA%=BOT% : YA%=SLEFT% 25310 PRINT "TIME PLOT" : PRINT : PRINT "VARIABLES TO BE PLOTTED (UP TO 4)" 25320 NEWNAMES=FALSE% : MAXNAMES=4 : SCALE%=0 25330 GOSUB 16000 : IF NAMEERR THEN RETURN 25340 PRINT : INPUT "DO YOU WANT VARIABLES SCALED BY MEANS (Y OR N)? ",S$ 25350 IF S$="Y" OR S$="y" THEN SCALE%=1 25355 YMIN=1E+37 : YMAX=-YMIN : CLS : SCREEN HRES% 25360 FOR I=0 TO L1 25370 NVAR=LISTV(I) : LAG=LAG(I) : GOSUB 25700 25380 VAVG(I)=1! : IF SCALE% THEN VAVG(I)=AVG : AMAX=AMAX/AVG : AMIN=AMIN/AVG 25390 IF AMIN<YMIN THEN YMIN=AMIN 25400 IF AMAX>YMAX THEN YMAX=AMAX 25410 NEXT I 25420 XB=(SRIGHT%-SLEFT%)/(NSMPL(NR2)-NSMPL(1)) 25430 YB=(BOT%-TOP%)/(YMAX-YMIN) 25440 IF YMAX>0 AND YMIN<0 THEN XA%=XA%+YMIN*YB 25450 LINE (YA%,BOT%)-(YA%,TOP%) 25460 LINE (SRIGHT%,XA%)-(SLEFT%,XA%) 25500 FOR I=0 TO L1 25510 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 : SKIP%=1 25520 FOR K=NSMPL(N1) TO NSMPL(N2) 25530 L=SLEFT%+(K-NSMPL(1))*XB 25540 J=BOT%-(X#(K+LAG(I),LISTV(I))/VAVG(I) - YMIN)*YB 25550 IF SKIP% THEN PSET (L,J) ELSE LINE -(L,J) 25555 SKIP%=0 25560 ON I+1 GOSUB 25800,25810,25820,25830,25840 25570 NEXT K : NEXT N2 : PSET (SLEFT%,XA%) 25580 NEXT I 25590 IF FC%=1 THEN GOSUB 25900 25600 LOCATE 25,8 : PRINT "LEGEND:"; 25605 FOR I=0 TO L1 25610 J=POS(0) 25620 PRINT SPC(5);PRNAM$(I); 25622 J=16+8*J : PSET (J,SL%) 25623 ON I+1 GOSUB 25800,25810,25820,25830,25840 25625 NEXT I 25650 GOSUB 19020 25660 CLS : SCREEN 0 : RETURN 25700 AMIN=1E+37 : AMAX=-AMIN : AVG=0! 25710 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 25720 FOR K=NSMPL(N1) TO NSMPL(N2) 25730 XC=X#(K+LAG,NVAR) : AVG=AVG+XC 25740 IF XC<AMIN THEN AMIN=XC 25750 IF XC>AMAX THEN AMAX=XC 25760 NEXT K : NEXT N2 : AVG=AVG/NOBS : RETURN 25800 DRAW "U2D4U2R2L4R2" : RETURN 25810 DRAW "E2G4E2F2H4F2" : RETURN 25820 DRAW "BE2D4L4U4R4BG2" : RETURN 25830 DRAW "BU2F2G2H2E2BD2" : RETURN 25840 RETURN 25900 IF LOB<NSMPL(1) THEN RETURN 25910 L=SLEFT%+(LOB+.5-NSMPL(1))*XB 25920 PSET (L,TOP%) : N2=INT((BOT%-TOP%)/20) 25925 FOR I=1 TO N2 : DRAW "D4BD13D3" : NEXT I 25930 RETURN 26000 REM 26010 REM FIRST ORDER AUTOCORRELATION 26020 REM 26030 CLS : PR$=CO$: RHO=0! : RHOL=-1! : INV%=0 26040 LROB=NSMPL(NR2) : GOSUB 11700 : IF NAMEERR THEN RETURN 26050 IF LISTLEN>=NOBS-1 THEN GOTO 11600 26060 NN=L1 : COUNT%=0 : ERASE XPX#,XPXI#,XBAR#,BETA# 26070 DIM XPX#(L1,L1),XPXI#(L1,L1),XBAR#(L1),BETA#(L1) 26080 PRINT:INPUT "DO YOU WANT TO CHOOSE AN INITIAL VALUE FOR RHO? ",ANSWER$ 26090 IF ANSWER$="Y" OR ANSWER$="y" THEN INPUT "STARTING VALUE > ",ANSWER$ : RHO=VAL(ANSWER$) 26095 GOSUB 11800 26110 WHILE ABS(RHO-RHOL)>.05 AND COUNT%<8 26120 GOSUB 26700 26130 GOSUB 21000 26140 UL#=0# : RHOL=RHO : SSR#=UL# : RHO=0! 26150 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 26160 FOR K=NSMPL(N1) TO NSMPL(N2) 26170 R#=X#(K,DEPVAR%) 26180 FOR I=0 TO L1 26190 R#=R#-BETA#(I)*X#(K+LAG(I),LISTV(I)) 26200 NEXT I 26210 RESID#(K)=R# : SSR#=SSR#+R#*R# 26220 RHO=RHO+UL#*R# 26230 UL#=R# 26240 NEXT K,N2 26250 RHO=RHO/(SSR#-UL#*UL#) : COUNT%=COUNT%+1 26260 PRINT : PRINT "RHO = ";RHO 26270 WEND 26280 INV%=1 : GOSUB 21250 26290 IF INVERR THEN RETURN 26300 L=NSMPL(1) : XB=SQR(1!-RHO*RHO) 26310 R#=X#(L,DEPVAR%) 26320 FOR K=L+1 TO NSMPL(2) : RESID#(K)=X#(K,DEPVAR%)-RHO*X#(K-1,DEPVAR%):NEXT K 26330 FOR I=0 TO L1 26340 R#=R#-BETA#(I)*X#(L+LAG(I),LISTV(I)) 26350 NEXT I : R#=R#*XB : RESID#(L)=R# 26360 SSR#=R#*R# : UL#=R# : RSUM=R# : DW#=0# 26370 FOR K=L+1 TO NSMPL(2) : R#=RESID#(K) 26380 FOR I=0 TO L1 26390 R#=R#-BETA#(I)*(X#(K+LAG(I),LISTV(I))-RHO*X#(K+LAG(I)-1,LISTV(I))) 26400 NEXT I 26410 RESID#(K)=R# : SSR#=SSR#+R#*R# 26420 UL#=R#-UL# : DW#=DW#+UL#*UL# : UL#=R# : RSUM=RSUM+R# 26430 NEXT K 26440 DW#=DW#/SSR# : S2#=SSR#/(NOBS-LISTLEN) 26490 GOSUB 24000 26495 RHO=0! : RETURN 26700 XB=1!-RHO*RHO : L=NSMPL(1) : N2=2 : N1=1 26710 FOR I=0 TO L1 26720 FOR J=I TO L1 26730 XPX#(I,J)=XB*X#(L+LAG(I),LISTV(I))*X#(L+LAG(J),LISTV(J)) 26740 FOR K=NSMPL(N1)+1 TO NSMPL(N2) 26750 XPX#(I,J)=XPX#(I,J)+(X#(K+LAG(I),LISTV(I))-RHO*X#(K+LAG(I)-1,LISTV(I)))*(X#(K+LAG(J),LISTV(J))-RHO*X#(K+LAG(J)-1,LISTV(J))) 26760 NEXT K:NEXT J:NEXT I 26780 FOR I=0 TO L1 26790 Y#(I)=XB*X#(L+LAG(I),LISTV(I))*X#(L,DEPVAR%) 26800 FOR K=NSMPL(N1)+1 TO NSMPL(N2) 26810 Y#(I)=Y#(I)+(X#(K+LAG(I),LISTV(I))-RHO*X#(K+LAG(I)-1,LISTV(I)))*(X#(K,DEPVAR%)-RHO*X#(K-1,DEPVAR%)) 26820 NEXT K: NEXT I 26830 FOR I=0 TO L1 26840 FOR J=I+1 TO L1 26850 XPX#(J,I)=XPX#(I,J) 26860 NEXT J: NEXT I: RETURN 27000 REM FORECAST EQUATION 27002 S$=" ": LSET S$=PR$: IF S$<>"O" AND S$<>"T" AND S$<>"C" THEN RETURN 27005 CLS: PRINT OSF$: PRINT 27010 L1=LR1: LOB=LROB : ULF=RHO*UL# : ASE=0 : AAE=0 : AR%=0 : S$=" " 27020 LP%=0 : SCR%=0 : LSET S$=PR$ 27030 GOSUB 20000 : IF ANSWER$="" THEN RETURN 27050 CLS : NOB=NOBS : IF S$="R" THEN AR%=1 ELSE 27100 27060 IF LOB>=NSMPL(1)-1 THEN 27100 27070 FOR I=LOB TO NSMPL(1)-2 : ULF=ULF*RHO : NEXT I 27100 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 27110 FOR K=NSMPL(N1) TO NSMPL(N2) 27120 XB=X#(K,DEPVAR%) 27125 IF K<=LOB THEN X#(K,MAXVAR-1)=X#(K,DEPVAR%)-RESID#(K) : NOB=NOB-1 : GOTO 27200 27130 FIT=0 27140 FOR I=0 TO L1 27150 FIT=FIT+BETA#(I)*X#(K+LAG(I),LISTRV(I)) 27160 IF AR% THEN FIT=FIT+ULF : ULF=ULF*RHO 27170 NEXT I 27180 X#(K,MAXVAR-1)=FIT : ASE=ASE+(XB-FIT)*(XB-FIT) 27190 AAE=AAE+ABS(XB-FIT) 27200 NEXT K : NEXT N2 27210 ASE=SQR(ASE/NOB) : AAE=AAE/NOB 27220 PEE=(FIT/XB-1)*100 27230 CLS: PRINT OSF$;": ";NAMES$(DEPVAR%): PRINT "OBSERVATION","ACTUAL","FITTED","ERROR" 27235 IF LP% THEN LPRINT "OBSERVATION","ACTUAL","FITTED","ERROR" 27240 FOR N2=2 TO NR2 STEP 2 : N1=N2-1 27250 FOR K=NSMPL(N1) TO NSMPL(N2) 27255 XB=X#(K,DEPVAR%): XC=X#(K,MAXVAR-1) 27260 PRINT K+1,XB,XC,XB-XC 27270 IF LP% THEN LPRINT K+1,XB,XC,XB-XC 27272 IF K=LOB THEN PRINT : IF LP% THEN LPRINT 27280 NEXT K : NEXT N2 27290 PRINT : PRINT "ROOT MEAN SQ ERROR ";ASE 27295 IF LP% THEN LPRINT : LPRINT "ROOT MEAN SQ ERROR ";ASE 27300 PRINT "MEAN ABSOLUTE ERROR ";AAE 27305 IF LP% THEN LPRINT "MEAN ABSOLUTE ERROR ";AAE 27310 PRINT "PERCENTAGE ERROR AT END ";PEE 27315 IF LP% THEN LPRINT "PERCENTAGE ERROR AT END ";PEE 27320 GOSUB 19200: IF SCR%=0 THEN 27370 27330 IH(0)=L1 : IH(1)=LAG(0): IH(2)=LAG(1) 27340 L1=1 : LAG(0)=0 : LAG(1)=0 : LISTV(0)=DEPVAR% : LISTV(1)=MAXVAR-1 27345 XA%=BOT% : YA%=SLEFT% : PRNAM$(0)="ACTUAL "+NAMES$(DEPVAR%) 27347 PRNAM$(1)="FITTED" 27350 FC%=1 : GOSUB 25355 27360 L1=IH(0): LAG(0)=IH(1): LAG(1)=IH(2) 27370 FC%=0 : GOSUB 19100 : IF LP% OR SCR% THEN 27230 27380 CLS : PRINT "CURRENT"; : PRINT : GOSUB 24800 27390 PRINT : GOSUB 20000 : RETURN 28000 CLS: PR$=TSLS$ 28010 RHO=0: INST=0: COR%=0 28030 GOSUB 11700: IF NAMEERR THEN RETURN 28035 IF LISTLEN>NOBS THEN GOSUB 11600 : RETURN 28040 PRINT: PRINT "ENTER INSTRUMENTS" 28050 MAXNAMES=NUMVAR: NEWNAMES=FALSE%: FORCE0%=FALSE%: INST=1 28060 GOSUB 16000: INST=0: IF NAMEERR THEN RETURN 28065 IF L1<LR1 THEN PRINT: PRINT "NOT ENOUGH INSTRUMENTS": GOSUB 19030: RETURN 28070 K1=MAXVAR: INST$=ANSWER$: ERASE IENDOG 28075 DIM IENDOG(LR1) 28080 FOR I=0 TO LR1 28085 IENDOG(I)=0 28090 FOR J=0 TO L1 28095 IF LISTRV(I)=LISTV(J) AND LAGR(I)=LAG(J) THEN 28120 28100 NEXT J 28105 K1=K1-1 28110 IF K1<=NUMVAR THEN PRINT "INSUFFICIENT VARIABLE SPACE": GOSUB 19030: RETURN 28115 IENDOG(I)=K1 28120 NEXT I 28130 IF K1=MAXVAR THEN PRINT "NO ENDOGENOUS RHS VARIABLES": GOSUB 19030: RETURN 28140 GOSUB 11800 28150 INST=1: GOSUB 17000 28155 GOSUB 17500 28160 NN=L1: GOSUB 21000: INST=0 28200 NV=0: INV%=0 28210 IF NV>LR1 THEN 28400 ELSE IF IENDOG(NV)=0 THEN NV=NV+1: GOTO 28210 28220 LVAR=LISTRV(NV) 28230 FOR I=0 TO L1: Y#(I)=0 28240 FOR N2=2 TO NR2 STEP 2: N1=N2-1 28250 FOR K=NSMPL(N1) TO NSMPL(N2) 28260 Y#(I)=Y#(I)+X#(K+LAG(I),LISTV(I))*X#(K+LAGR(NV),LVAR) 28270 NEXT K: NEXT N2: NEXT I 28290 GOSUB 21130 28300 FOR N2=2 TO NR2 STEP 2: N1=N2-1 28310 FOR K=NSMPL(N1) TO NSMPL(N2) 28320 X#(K,IENDOG(NV))=0 28330 FOR I=0 TO L1 28340 X#(K,IENDOG(NV))=X#(K,IENDOG(NV))+BETA#(I)*X#(K+LAG(I),LISTV(I)) 28350 NEXT I: NEXT K: NEXT N2 28360 NV=NV+1: GOTO 28210 28400 FOR I=0 TO LR1 28410 IF IENDOG(I)>0 THEN IV=IENDOG(I) ELSE IV=LISTRV(I) 28420 FOR J=I TO LR1 28430 IF IENDOG(J)>0 THEN JV=IENDOG(J) ELSE JV=LISTRV(J) 28440 XPX#(I,J)=0 28450 FOR N2=2 TO NR2 STEP 2: N1=N2-1 28460 FOR K=NSMPL(N1) TO NSMPL(N2) 28470 XPX#(I,J)=XPX#(I,J)+X#(K+LAGR(I),IV)*X#(K+LAGR(J),JV) 28480 NEXT K: NEXT N2: NEXT J 28490 Y#(I)=0 28500 FOR N2=2 TO NR2 STEP 2: N1=N2-1 28510 FOR K=NSMPL(N1) TO NSMPL(N2) 28520 Y#(I)=Y#(I)+X#(K+LAGR(I),IV)*X#(K,DEPVAR%) 28530 NEXT K: NEXT N2: NEXT I 28540 LISTLEN=LR1+1: BI%=0: GOSUB 17500 28550 NN=LR1: INV%=1: INST=0: GOSUB 21000 : IF INVERR THEN RETURN 28560 FOR I=0 TO LR1: LISTV(I)=LISTRV(I): NEXT I: SWAP L1,LR1 28570 INST=1: GOSUB 11306: INST=0: RETURN 29000 LP%=0: IF LR1=0 THEN RETURN 29005 CLS: S$=" ": LSET S$=PR$ 29010 IF S$<>"O" THEN PRINT OANDI$;" ONLY AVAILABLE FOR ";OLS$: GOSUB 19030: RETURN 29015 L=0: GOSUB 29300 29020 FOR N2=2 TO NR2 STEP 2: N1=N2-1 29030 FOR K=NSMPL(N1) TO NSMPL(N2) 29040 VII#=0: SRESID(K)=0 29050 FOR I=0 TO LR1 29060 VII#=VII#+X#(K+LAGR(I),LISTRV(I))*X#(K+LAGR(I),LISTRV(I))*XPXI#(I,I) 29065 IF I=0 THEN 29095 29070 FOR J=0 TO I-1 29080 VII#=VII#+2*X#(K+LAGR(I),LISTRV(I))*X#(K+LAGR(J),LISTRV(J))*XPXI#(I,J) 29090 NEXT J 29095 NEXT I 29100 IF VII#>=1 THEN PRINT " ELEMENT ERROR" TAB(31) CSNG(1!-VII#): IF LP% THEN LPRINT " ELEMENT ERROR" TAB(31) CSNG(1!-VII#): GOTO 29160 ELSE 29160 29108 SRESID(K)=RESID#(K)/SQR(S2#*(1-VII#)) 29110 COOKSD=SRESID(K)*SRESID(K)*VII#/((LR1+1)*(1-VII#)) 29120 IF LP% THEN 29130 ELSE IF L<20 THEN 29140 29125 GOSUB 19030: CLS: L=0: GOSUB 29300: GOTO 29140 29130 IF L<50 THEN 29140 29135 LPRINT CHR$(PADV%): GOSUB 29300: L=0 29140 PRINT TAB(4) K+1 TAB(15) CSNG(RESID#(K)) TAB(31) CSNG(1!-VII#) TAB(47) SRESID(K) TAB(63) COOKSD 29150 IF LP% THEN LPRINT TAB(4) K+1 TAB(15) CSNG(RESID#(K)) TAB(31) CSNG(1!-VII#) TAB(47) SRESID(K) TAB(63) COOKSD 29160 L=L+1 29170 NEXT K 29175 PRINT: L=L+1: IF LP% THEN LPRINT 29180 NEXT N2 29190 GOSUB 19100: IF SCR% OR LP% THEN 29010 29195 RETURN 29300 PRINT "OBSERVATION" TAB(16) "RESIDUAL" TAB(35) "Mii" TAB(45) "STUDENT. RESID" TAB(63) "COOKS DISTANCE" 29310 IF LP% THEN LPRINT: LPRINT "OBSERVATION" TAB(16) "RESIDUAL" TAB(35) "Mii" TAB(45) "STUDENT. RESID" TAB(63) "COOKS DISTANCE" 29320 RETURN LPRINT: LPRINT "OBSERVATION" TAB(16